<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>libspotify: Session handling</title>

<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />



</head>
<body>
<div id="top"><!-- do not remove this div! -->


<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  
  
  <td style="padding-left: 0.5em;">
   <div id="projectname">libspotify
   
   </div>
   
  </td>
  
  
  
 </tr>
 </tbody>
</table>
</div>

<!-- Generated by Doxygen 1.8.0 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
      <li><a href="examples.html"><span>Examples</span></a></li>
    </ul>
  </div>
</div>
<div class="header">
  <div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#define-members">Defines</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">Session handling</div>  </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structsp__audioformat.html">sp_audioformat</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structsp__audio__buffer__stats.html">sp_audio_buffer_stats</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structsp__subscribers.html">sp_subscribers</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structsp__offline__sync__status.html">sp_offline_sync_status</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structsp__session__callbacks.html">sp_session_callbacks</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structsp__session__config.html">sp_session_config</a></td></tr>
<tr><td colspan="2"><h2><a name="define-members"></a>
Defines</h2></td></tr>
<tr class="memitem:ga63b2309874193750ec3395f6cae32899"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga63b2309874193750ec3395f6cae32899">SPOTIFY_API_VERSION</a>&#160;&#160;&#160;12</td></tr>
<tr><td colspan="2"><h2><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:gac0fa3d4cc60bd2e3d666026f88980e8c"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="group__session.html#gabf77bb5a124d5a6ee9a12c86abbc0d34">sp_connectionstate</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gac0fa3d4cc60bd2e3d666026f88980e8c">sp_connectionstate</a></td></tr>
<tr class="memitem:ga5ef462e78d5a5af60dd0e7085b1ba512"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="group__session.html#ga087d21080010768316cfb55d938eb94d">sp_sampletype</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga5ef462e78d5a5af60dd0e7085b1ba512">sp_sampletype</a></td></tr>
<tr class="memitem:ga5338d4a10576ba8d6ab11b70892d503c"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structsp__audioformat.html">sp_audioformat</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga5338d4a10576ba8d6ab11b70892d503c">sp_audioformat</a></td></tr>
<tr class="memitem:ga83d3de45241a44e787410993c5fac0ea"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="group__session.html#ga77ddd919314a7bb16140569af7a38fe2">sp_bitrate</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga83d3de45241a44e787410993c5fac0ea">sp_bitrate</a></td></tr>
<tr class="memitem:ga86723f553db2db6a8f507cd748948ad4"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="group__session.html#gafdd7117213605e6f2671c4f289b44609">sp_playlist_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga86723f553db2db6a8f507cd748948ad4">sp_playlist_type</a></td></tr>
<tr class="memitem:ga647e4de81e5ac0a2e5d1193b1005ed3e"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="group__session.html#ga99e8e9176ce40fff08a9be8b944edb09">sp_search_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga647e4de81e5ac0a2e5d1193b1005ed3e">sp_search_type</a></td></tr>
<tr class="memitem:gac507efa32e8c122fbe9ea41d96180d06"><td class="memItemLeft" align="right" valign="top">typedef enum <br class="typebreak"/>
<a class="el" href="group__session.html#ga811fa52ed0fdb5cda732682e27e40417">sp_playlist_offline_status</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gac507efa32e8c122fbe9ea41d96180d06">sp_playlist_offline_status</a></td></tr>
<tr class="memitem:ga60c7ff53ddbc04c036a23181b7275d69"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="group__session.html#gad7d9465769597b2a379ac704099adfdf">sp_availability</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga60c7ff53ddbc04c036a23181b7275d69">sp_track_availability</a></td></tr>
<tr class="memitem:gae689044941537050de641a1dcd4c75d5"><td class="memItemLeft" align="right" valign="top">typedef enum <br class="typebreak"/>
<a class="el" href="group__session.html#gaeaa41aad3c0047409996a6ec3b03203f">sp_track_offline_status</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gae689044941537050de641a1dcd4c75d5">sp_track_offline_status</a></td></tr>
<tr class="memitem:gaca320fd41bd0556b7fa1f2fa6e14faee"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="group__session.html#ga61bc424465d776af3ceeb69eee2bb492">sp_image_size</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gaca320fd41bd0556b7fa1f2fa6e14faee">sp_image_size</a></td></tr>
<tr class="memitem:ga25462859a596a247ba5cc1853fc32cca"><td class="memItemLeft" align="right" valign="top">typedef struct <br class="typebreak"/>
<a class="el" href="structsp__audio__buffer__stats.html">sp_audio_buffer_stats</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga25462859a596a247ba5cc1853fc32cca">sp_audio_buffer_stats</a></td></tr>
<tr class="memitem:gafb515e30d134c61b8eaaff3177af0b5b"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structsp__subscribers.html">sp_subscribers</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gafb515e30d134c61b8eaaff3177af0b5b">sp_subscribers</a></td></tr>
<tr class="memitem:ga05a7dbb946a9c47bf011f3f3d77964c3"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="group__session.html#ga3e8773baeb94189b9a1ff27d6a5e3553">sp_connection_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga05a7dbb946a9c47bf011f3f3d77964c3">sp_connection_type</a></td></tr>
<tr class="memitem:ga24ee483cdceef9af3b415c020b197a75"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="group__session.html#gad275d696685b2ad9ff1a2c3e16af6502">sp_connection_rules</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga24ee483cdceef9af3b415c020b197a75">sp_connection_rules</a></td></tr>
<tr class="memitem:gab947eba77c176504c69cbb2f1de9830d"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="group__session.html#gac86504cc9e8cadbc30c8aa8dbf355034">sp_artistbrowse_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gab947eba77c176504c69cbb2f1de9830d">sp_artistbrowse_type</a></td></tr>
<tr class="memitem:gaa7f24f13d6d105869c405045a4cc2a20"><td class="memItemLeft" align="right" valign="top">typedef struct <br class="typebreak"/>
<a class="el" href="structsp__offline__sync__status.html">sp_offline_sync_status</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gaa7f24f13d6d105869c405045a4cc2a20">sp_offline_sync_status</a></td></tr>
<tr class="memitem:gaf1d92302cd5d0d4a032e1408188c8fd5"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structsp__session__callbacks.html">sp_session_callbacks</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gaf1d92302cd5d0d4a032e1408188c8fd5">sp_session_callbacks</a></td></tr>
<tr class="memitem:ga372b25a93da38d4d707b0c2eaa7b3ebb"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structsp__session__config.html">sp_session_config</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga372b25a93da38d4d707b0c2eaa7b3ebb">sp_session_config</a></td></tr>
<tr><td colspan="2"><h2><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:gabf77bb5a124d5a6ee9a12c86abbc0d34"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gabf77bb5a124d5a6ee9a12c86abbc0d34">sp_connectionstate</a> { <br/>
&#160;&#160;<a class="el" href="group__session.html#ggabf77bb5a124d5a6ee9a12c86abbc0d34ae31e9958a98211ecff5ecbcf7041dfa5">SP_CONNECTION_STATE_LOGGED_OUT</a> =  0, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#ggabf77bb5a124d5a6ee9a12c86abbc0d34a88ae17b4168184e62e4c190c289c47c5">SP_CONNECTION_STATE_LOGGED_IN</a> =  1, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#ggabf77bb5a124d5a6ee9a12c86abbc0d34ad1a6eb721675af4613f823c091538a8c">SP_CONNECTION_STATE_DISCONNECTED</a> =  2, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#ggabf77bb5a124d5a6ee9a12c86abbc0d34a4ddf57518007eef86b06f496d7059484">SP_CONNECTION_STATE_UNDEFINED</a> =  3, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#ggabf77bb5a124d5a6ee9a12c86abbc0d34a63099ef9185ba287fcd2e77be3c47d8f">SP_CONNECTION_STATE_OFFLINE</a> =  4
<br/>
 }</td></tr>
<tr class="memitem:ga087d21080010768316cfb55d938eb94d"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga087d21080010768316cfb55d938eb94d">sp_sampletype</a> { <a class="el" href="group__session.html#gga087d21080010768316cfb55d938eb94daa829b269d191cca95ecb02c2bc59da42">SP_SAMPLETYPE_INT16_NATIVE_ENDIAN</a> =  0
 }</td></tr>
<tr class="memitem:ga77ddd919314a7bb16140569af7a38fe2"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga77ddd919314a7bb16140569af7a38fe2">sp_bitrate</a> { <br/>
&#160;&#160;<a class="el" href="group__session.html#gga77ddd919314a7bb16140569af7a38fe2a5b5c794224972f833a4b7eec9d7909c9">SP_BITRATE_160k</a> =  0, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#gga77ddd919314a7bb16140569af7a38fe2a9383c0dc9faefd2cbb38c3b9342c47e0">SP_BITRATE_320k</a> =  1, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#gga77ddd919314a7bb16140569af7a38fe2ad815a35af7e6bb5e2ef29418af62759b">SP_BITRATE_96k</a> =  2
<br/>
 }</td></tr>
<tr class="memitem:gafdd7117213605e6f2671c4f289b44609"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gafdd7117213605e6f2671c4f289b44609">sp_playlist_type</a> { <br/>
&#160;&#160;<a class="el" href="group__session.html#ggafdd7117213605e6f2671c4f289b44609a6bd6bf9b62018fa9bbf969835c2f3077">SP_PLAYLIST_TYPE_PLAYLIST</a> =  0, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#ggafdd7117213605e6f2671c4f289b44609a4d3266991787f9438deb9de83d9200da">SP_PLAYLIST_TYPE_START_FOLDER</a> =  1, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#ggafdd7117213605e6f2671c4f289b44609a3ec52ad1d99d8e32e1b9de31e3f5187a">SP_PLAYLIST_TYPE_END_FOLDER</a> =  2, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#ggafdd7117213605e6f2671c4f289b44609ad4f860ef76154e3e2c0d9da2f57a2784">SP_PLAYLIST_TYPE_PLACEHOLDER</a> =  3
<br/>
 }</td></tr>
<tr class="memitem:ga99e8e9176ce40fff08a9be8b944edb09"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga99e8e9176ce40fff08a9be8b944edb09">sp_search_type</a> </td></tr>
<tr class="memitem:ga811fa52ed0fdb5cda732682e27e40417"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga811fa52ed0fdb5cda732682e27e40417">sp_playlist_offline_status</a> { <br/>
&#160;&#160;<a class="el" href="group__session.html#gga811fa52ed0fdb5cda732682e27e40417abef62e4e3a4af8827fed7fe3aa733ca0">SP_PLAYLIST_OFFLINE_STATUS_NO</a> =  0, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#gga811fa52ed0fdb5cda732682e27e40417affed38ac820e084b96fb48e3d1939584">SP_PLAYLIST_OFFLINE_STATUS_YES</a> =  1, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#gga811fa52ed0fdb5cda732682e27e40417abc999c70761d392b26753708e9a2cfa1">SP_PLAYLIST_OFFLINE_STATUS_DOWNLOADING</a> =  2, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#gga811fa52ed0fdb5cda732682e27e40417a7d929bbf4f1df3633b283e39b9c95919">SP_PLAYLIST_OFFLINE_STATUS_WAITING</a> =  3
<br/>
 }</td></tr>
<tr class="memitem:gad7d9465769597b2a379ac704099adfdf"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gad7d9465769597b2a379ac704099adfdf">sp_availability</a> { <br/>
&#160;&#160;<a class="el" href="group__session.html#ggad7d9465769597b2a379ac704099adfdfa44bc1e6f138910b3f8dbd309325e0077">SP_TRACK_AVAILABILITY_UNAVAILABLE</a> =  0, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#ggad7d9465769597b2a379ac704099adfdfa3b837ba6d740b5650b0113734a3b2ff7">SP_TRACK_AVAILABILITY_AVAILABLE</a> =  1, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#ggad7d9465769597b2a379ac704099adfdfae7b2cfafa10288ecc50df97621bbe940">SP_TRACK_AVAILABILITY_NOT_STREAMABLE</a> =  2, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#ggad7d9465769597b2a379ac704099adfdfaeb5d63e89c543f513cd3054969e50914">SP_TRACK_AVAILABILITY_BANNED_BY_ARTIST</a> =  3
<br/>
 }</td></tr>
<tr class="memitem:gaeaa41aad3c0047409996a6ec3b03203f"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gaeaa41aad3c0047409996a6ec3b03203f">sp_track_offline_status</a> { <br/>
&#160;&#160;<a class="el" href="group__session.html#ggaeaa41aad3c0047409996a6ec3b03203faad1a1cba82ce9f9be678f4d1042eddec">SP_TRACK_OFFLINE_NO</a> =  0, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#ggaeaa41aad3c0047409996a6ec3b03203fa1fdd2a518dcdc072cfca27a0ca4f2581">SP_TRACK_OFFLINE_WAITING</a> =  1, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#ggaeaa41aad3c0047409996a6ec3b03203fa7dcf6dfc56a8421200451d07a476f370">SP_TRACK_OFFLINE_DOWNLOADING</a> =  2, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#ggaeaa41aad3c0047409996a6ec3b03203fac54d46cbc73de7686a1ad8daf269532a">SP_TRACK_OFFLINE_DONE</a> =  3, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#ggaeaa41aad3c0047409996a6ec3b03203fa86618798c266540bdc889dd037a52631">SP_TRACK_OFFLINE_ERROR</a> =  4, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#ggaeaa41aad3c0047409996a6ec3b03203fa00fe430030fb6a8a49a46c11cca7326c">SP_TRACK_OFFLINE_DONE_EXPIRED</a> =  5, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#ggaeaa41aad3c0047409996a6ec3b03203fa405a9b7a3fa489ad2dadbb108794e247">SP_TRACK_OFFLINE_LIMIT_EXCEEDED</a> =  6, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#ggaeaa41aad3c0047409996a6ec3b03203fa5f3e19627de4509ae4a3864fd29edee6">SP_TRACK_OFFLINE_DONE_RESYNC</a> =  7
<br/>
 }</td></tr>
<tr class="memitem:ga61bc424465d776af3ceeb69eee2bb492"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga61bc424465d776af3ceeb69eee2bb492">sp_image_size</a> { <br/>
&#160;&#160;<a class="el" href="group__session.html#gga61bc424465d776af3ceeb69eee2bb492ad20c808fd1f8180d1f49f643975d1dd7">SP_IMAGE_SIZE_NORMAL</a> =  0, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#gga61bc424465d776af3ceeb69eee2bb492ab9340b1bcf2129c3ad1328ea617d547f">SP_IMAGE_SIZE_SMALL</a> =  1, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#gga61bc424465d776af3ceeb69eee2bb492a0a0b624afbb2a66ee3d7954202b89721">SP_IMAGE_SIZE_LARGE</a> =  2
<br/>
 }</td></tr>
<tr class="memitem:ga3e8773baeb94189b9a1ff27d6a5e3553"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga3e8773baeb94189b9a1ff27d6a5e3553">sp_connection_type</a> { <br/>
&#160;&#160;<a class="el" href="group__session.html#gga3e8773baeb94189b9a1ff27d6a5e3553af949fae9bc12f47b99ef290fa9b5d8a7">SP_CONNECTION_TYPE_UNKNOWN</a> =  0, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#gga3e8773baeb94189b9a1ff27d6a5e3553aa7aae7ae3f7c471ece1c6aa2705d046c">SP_CONNECTION_TYPE_NONE</a> =  1, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#gga3e8773baeb94189b9a1ff27d6a5e3553a3ca3e6a85ac9d497914c35620ad5179d">SP_CONNECTION_TYPE_MOBILE</a> =  2, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#gga3e8773baeb94189b9a1ff27d6a5e3553a05b41bbfd369f9030a7daafc9395116e">SP_CONNECTION_TYPE_MOBILE_ROAMING</a> =  3, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#gga3e8773baeb94189b9a1ff27d6a5e3553a31d2cad7379f1bc2eeedd24c40541cb9">SP_CONNECTION_TYPE_WIFI</a> =  4, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#gga3e8773baeb94189b9a1ff27d6a5e3553a4f9f0c09e59af4114bb369ebcc474710">SP_CONNECTION_TYPE_WIRED</a> =  5
<br/>
 }</td></tr>
<tr class="memitem:gad275d696685b2ad9ff1a2c3e16af6502"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gad275d696685b2ad9ff1a2c3e16af6502">sp_connection_rules</a> { <br/>
&#160;&#160;<a class="el" href="group__session.html#ggad275d696685b2ad9ff1a2c3e16af6502aa39a1c21c17c55cd1547bc900ae2d386">SP_CONNECTION_RULE_NETWORK</a> =  0x1, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#ggad275d696685b2ad9ff1a2c3e16af6502af2772ba84ee7e410ad99708a11955670">SP_CONNECTION_RULE_NETWORK_IF_ROAMING</a> =  0x2, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#ggad275d696685b2ad9ff1a2c3e16af6502a91a946573c44de44d74e9d20dbce4c74">SP_CONNECTION_RULE_ALLOW_SYNC_OVER_MOBILE</a> =  0x4, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#ggad275d696685b2ad9ff1a2c3e16af6502a548f3734832ec65a992e598d8b91633d">SP_CONNECTION_RULE_ALLOW_SYNC_OVER_WIFI</a> =  0x8
<br/>
 }</td></tr>
<tr class="memitem:gac86504cc9e8cadbc30c8aa8dbf355034"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gac86504cc9e8cadbc30c8aa8dbf355034">sp_artistbrowse_type</a> { <br/>
&#160;&#160;<a class="el" href="group__session.html#ggac86504cc9e8cadbc30c8aa8dbf355034a2914168528aded818177c013a0dd7e87">SP_ARTISTBROWSE_FULL</a>, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#ggac86504cc9e8cadbc30c8aa8dbf355034afbad1e58606b3230dce5bc3320c95d12">SP_ARTISTBROWSE_NO_TRACKS</a>, 
<br/>
&#160;&#160;<a class="el" href="group__session.html#ggac86504cc9e8cadbc30c8aa8dbf355034ac0032981f8dbf44c022e6a7ab1672167">SP_ARTISTBROWSE_NO_ALBUMS</a>
<br/>
 }</td></tr>
<tr><td colspan="2"><h2><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gaf2891f2daced4ff6da84219d6376b3aa"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gaf2891f2daced4ff6da84219d6376b3aa">sp_session_create</a> (const <a class="el" href="structsp__session__config.html">sp_session_config</a> *config, <a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> **sess)</td></tr>
<tr class="memitem:gab81c540b76f7425a9cc0dbf270c09674"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gab81c540b76f7425a9cc0dbf270c09674">sp_session_release</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *sess)</td></tr>
<tr class="memitem:ga4533a992a120cacb109c892a852afe2a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga4533a992a120cacb109c892a852afe2a">sp_session_login</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session, const char *username, const char *password, bool remember_me, const char *blob)</td></tr>
<tr class="memitem:gae1bc9bebd230226c3d48925cd1be6edf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gae1bc9bebd230226c3d48925cd1be6edf">sp_session_relogin</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session)</td></tr>
<tr class="memitem:gab349c7bfe59e10e167bd75c20df9fc97"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gab349c7bfe59e10e167bd75c20df9fc97">sp_session_remembered_user</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session, char *buffer, size_t buffer_size)</td></tr>
<tr class="memitem:gac7a365c2166738909cdb901edebc3f70"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gac7a365c2166738909cdb901edebc3f70">sp_session_user_name</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session)</td></tr>
<tr class="memitem:ga61e6b796d9e07682c018e888b901a191"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga61e6b796d9e07682c018e888b901a191">sp_session_forget_me</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session)</td></tr>
<tr class="memitem:ga267bbcae24b6bb1fd56de56678a5f455"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__types.html#gaed2dbaa1eebd6752f76613daad9158bc">sp_user</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga267bbcae24b6bb1fd56de56678a5f455">sp_session_user</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session)</td></tr>
<tr class="memitem:gab7f08ca0939985b30ae2d1ed9db1d726"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gab7f08ca0939985b30ae2d1ed9db1d726">sp_session_logout</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session)</td></tr>
<tr class="memitem:ga5adf6bed839f5555d6760fcb70fdcf4f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga5adf6bed839f5555d6760fcb70fdcf4f">sp_session_signup_perform_action</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session, sp_signup_action action, void *user_data)</td></tr>
<tr class="memitem:ga709699550b72d211b97794315bd5572c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga709699550b72d211b97794315bd5572c">sp_session_signup_get_unaccepted_licenses</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session, const char **licenses, int num_licenses)</td></tr>
<tr class="memitem:ga34005bb06ee3de8ee4221597a0335cca"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga34005bb06ee3de8ee4221597a0335cca">sp_session_flush_caches</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session)</td></tr>
<tr class="memitem:ga34a7c9527705ab7d23b742006d81ea35"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__session.html#gabf77bb5a124d5a6ee9a12c86abbc0d34">sp_connectionstate</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga34a7c9527705ab7d23b742006d81ea35">sp_session_connectionstate</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session)</td></tr>
<tr class="memitem:gabfb3f59b20ae0b225e154eb9095152b2"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gabfb3f59b20ae0b225e154eb9095152b2">sp_session_userdata</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session)</td></tr>
<tr class="memitem:ga6f27c55d1ce9f3f794fcce7bee7adfea"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga6f27c55d1ce9f3f794fcce7bee7adfea">sp_session_set_cache_size</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session, size_t size)</td></tr>
<tr class="memitem:gaff27cb730db6debf55e750e39e7fadd7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gaff27cb730db6debf55e750e39e7fadd7">sp_session_process_events</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session, int *next_timeout)</td></tr>
<tr class="memitem:gac73bf2c569a43d824439b557d5e4b293"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gac73bf2c569a43d824439b557d5e4b293">sp_session_player_load</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session, <a class="el" href="group__types.html#ga47bbd2262f0c8b5d7147af7d62198e48">sp_track</a> *track)</td></tr>
<tr class="memitem:ga3430cd4f11541868d3f83eaa31aecf44"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga3430cd4f11541868d3f83eaa31aecf44">sp_session_player_seek</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session, int offset)</td></tr>
<tr class="memitem:gab66c5915967e4f90db945b118e620624"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gab66c5915967e4f90db945b118e620624">sp_session_player_play</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session, bool play)</td></tr>
<tr class="memitem:gafa7ee2803f119451bb8be3bf28746975"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gafa7ee2803f119451bb8be3bf28746975">sp_session_player_unload</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session)</td></tr>
<tr class="memitem:gaf42e30a1f430ac7c436c7d9f0485368d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gaf42e30a1f430ac7c436c7d9f0485368d">sp_session_player_prefetch</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session, <a class="el" href="group__types.html#ga47bbd2262f0c8b5d7147af7d62198e48">sp_track</a> *track)</td></tr>
<tr class="memitem:ga319767f0b795f1c46a08390b587c5671"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga319767f0b795f1c46a08390b587c5671">sp_session_playlistcontainer</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session)</td></tr>
<tr class="memitem:gac72ccb51031c846101134b73195bb9ec"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gac72ccb51031c846101134b73195bb9ec">sp_session_inbox_create</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session)</td></tr>
<tr class="memitem:ga02391c9e28cff0a602f7139542e0238f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga02391c9e28cff0a602f7139542e0238f">sp_session_starred_create</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session)</td></tr>
<tr class="memitem:ga9be806a719a6399bfe1fd0d4c125e0eb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga9be806a719a6399bfe1fd0d4c125e0eb">sp_session_starred_for_user_create</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session, const char *canonical_username)</td></tr>
<tr class="memitem:ga4ad3a1de596a41f275120dad3bb4685d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga4ad3a1de596a41f275120dad3bb4685d">sp_session_publishedcontainer_for_user_create</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session, const char *canonical_username)</td></tr>
<tr class="memitem:gacd590e095b011af42fb10046117846fe"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gacd590e095b011af42fb10046117846fe">sp_session_preferred_bitrate</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session, <a class="el" href="group__session.html#ga77ddd919314a7bb16140569af7a38fe2">sp_bitrate</a> bitrate)</td></tr>
<tr class="memitem:ga4bba5f828d6c87692f2c355cc8f07c61"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga4bba5f828d6c87692f2c355cc8f07c61">sp_session_preferred_offline_bitrate</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session, <a class="el" href="group__session.html#ga77ddd919314a7bb16140569af7a38fe2">sp_bitrate</a> bitrate, bool allow_resync)</td></tr>
<tr class="memitem:ga7913df06394360f255c77fb87af0f1fe"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga7913df06394360f255c77fb87af0f1fe">sp_session_get_volume_normalization</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session)</td></tr>
<tr class="memitem:ga4e14f58356d00e3693be84623bf6bd11"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga4e14f58356d00e3693be84623bf6bd11">sp_session_set_volume_normalization</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session, bool on)</td></tr>
<tr class="memitem:ga42a8f0999316ac7f141926092879ad2f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga42a8f0999316ac7f141926092879ad2f">sp_session_set_private_session</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session, bool enabled)</td></tr>
<tr class="memitem:ga72702ee06bc96c074804388d24344149"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga72702ee06bc96c074804388d24344149">sp_session_is_private_session</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session)</td></tr>
<tr class="memitem:ga2475a1fbc2eeacccb96b7f36efd36725"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga2475a1fbc2eeacccb96b7f36efd36725">sp_session_set_scrobbling</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session, sp_social_provider provider, sp_scrobbling_state state)</td></tr>
<tr class="memitem:ga6a56bc82ff0b369bb6e0f035534ce33d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga6a56bc82ff0b369bb6e0f035534ce33d">sp_session_is_scrobbling</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session, sp_social_provider provider, sp_scrobbling_state *state)</td></tr>
<tr class="memitem:ga0fad03ceabcf8d68af78f0f35fcbcc8d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga0fad03ceabcf8d68af78f0f35fcbcc8d">sp_session_is_scrobbling_possible</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session, sp_social_provider provider, bool *out)</td></tr>
<tr class="memitem:ga9e5ee46ef5e75aa462607caac984f2de"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga9e5ee46ef5e75aa462607caac984f2de">sp_session_set_social_credentials</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session, sp_social_provider provider, const char *username, const char *password)</td></tr>
<tr class="memitem:gaf81c61799e0ccdbba048fb79ec050930"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gaf81c61799e0ccdbba048fb79ec050930">sp_session_set_connection_type</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session, <a class="el" href="group__session.html#ga3e8773baeb94189b9a1ff27d6a5e3553">sp_connection_type</a> type)</td></tr>
<tr class="memitem:ga0ac85299c37710321b6d64713e1d6ba8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga0ac85299c37710321b6d64713e1d6ba8">sp_session_set_connection_rules</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session, <a class="el" href="group__session.html#gad275d696685b2ad9ff1a2c3e16af6502">sp_connection_rules</a> rules)</td></tr>
<tr class="memitem:gaf535124b4208c279cb98a061834e6411"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gaf535124b4208c279cb98a061834e6411">sp_offline_tracks_to_sync</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session)</td></tr>
<tr class="memitem:gad6cee58fa44453b7a4fd2ae2266df055"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gad6cee58fa44453b7a4fd2ae2266df055">sp_offline_num_playlists</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session)</td></tr>
<tr class="memitem:ga02525cd659a34728047cd3801049e822"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga02525cd659a34728047cd3801049e822">sp_offline_sync_get_status</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session, <a class="el" href="structsp__offline__sync__status.html">sp_offline_sync_status</a> *status)</td></tr>
<tr class="memitem:gac36816dc42825db9a5a2fbd2694f20af"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#gac36816dc42825db9a5a2fbd2694f20af">sp_offline_time_left</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session)</td></tr>
<tr class="memitem:ga54c7693afa9be664f3ea870feb0df8d9"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__session.html#ga54c7693afa9be664f3ea870feb0df8d9">sp_session_user_country</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session)</td></tr>
</table>
<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
<p>The concept of a session is fundamental for all communication with the Spotify ecosystem - it is the object responsible for communicating with the Spotify service. You will need to instantiate a session that then can be used to request artist information, perform searches etc. </p>
<hr/><h2>Define Documentation</h2>
<a class="anchor" id="ga63b2309874193750ec3395f6cae32899"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define <a class="el" href="group__session.html#ga63b2309874193750ec3395f6cae32899">SPOTIFY_API_VERSION</a>&#160;&#160;&#160;12</td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Current version of the application interface, that is, the API described by this file.</p>
<p>This value should be set in the <a class="el" href="structsp__session__config.html">sp_session_config</a> struct passed to <a class="el" href="group__session.html#gaf2891f2daced4ff6da84219d6376b3aa">sp_session_create()</a>.</p>
<p>If an (upgraded) library is no longer compatible with this version the error <a class="el" href="group__error.html#ggafd27986ce4cd9eeaeca8adda83c9eb6ba17c588fa9648e3649185e595bdb88d6f" title="The library version targeted does not match the one you claim you support.">SP_ERROR_BAD_API_VERSION</a> will be returned from <a class="el" href="group__session.html#gaf2891f2daced4ff6da84219d6376b3aa">sp_session_create()</a>. Future versions of the library will provide you with some kind of mechanism to request an updated version of the library. </p>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="jukebox_8c-example.html#a27">jukebox.c</a>.</dd>
</dl>
</div>
</div>
<hr/><h2>Typedef Documentation</h2>
<a class="anchor" id="gab947eba77c176504c69cbb2f1de9830d"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef enum <a class="el" href="group__session.html#gac86504cc9e8cadbc30c8aa8dbf355034">sp_artistbrowse_type</a>  <a class="el" href="group__session.html#gac86504cc9e8cadbc30c8aa8dbf355034">sp_artistbrowse_type</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Controls the type of data that will be included in artist browse queries </p>

</div>
</div>
<a class="anchor" id="ga25462859a596a247ba5cc1853fc32cca"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef struct <a class="el" href="structsp__audio__buffer__stats.html">sp_audio_buffer_stats</a>  <a class="el" href="structsp__audio__buffer__stats.html">sp_audio_buffer_stats</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Buffer stats used by get_audio_buffer_stats callback </p>

</div>
</div>
<a class="anchor" id="ga5338d4a10576ba8d6ab11b70892d503c"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef struct <a class="el" href="structsp__audioformat.html">sp_audioformat</a>  <a class="el" href="structsp__audioformat.html">sp_audioformat</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Audio format descriptor </p>

</div>
</div>
<a class="anchor" id="ga83d3de45241a44e787410993c5fac0ea"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef enum <a class="el" href="group__session.html#ga77ddd919314a7bb16140569af7a38fe2">sp_bitrate</a>  <a class="el" href="group__session.html#ga77ddd919314a7bb16140569af7a38fe2">sp_bitrate</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Bitrate definitions for music streaming </p>

</div>
</div>
<a class="anchor" id="ga24ee483cdceef9af3b415c020b197a75"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef enum <a class="el" href="group__session.html#gad275d696685b2ad9ff1a2c3e16af6502">sp_connection_rules</a>  <a class="el" href="group__session.html#gad275d696685b2ad9ff1a2c3e16af6502">sp_connection_rules</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Connection rules, bitwise OR of flags</p>
<p>The default is SP_CONNECTION_RULE_NETWORK | SP_CONNECTION_RULE_ALLOW_SYNC </p>

</div>
</div>
<a class="anchor" id="ga05a7dbb946a9c47bf011f3f3d77964c3"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef enum <a class="el" href="group__session.html#ga3e8773baeb94189b9a1ff27d6a5e3553">sp_connection_type</a>  <a class="el" href="group__session.html#ga3e8773baeb94189b9a1ff27d6a5e3553">sp_connection_type</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Current connection type set using <a class="el" href="group__session.html#gaf81c61799e0ccdbba048fb79ec050930">sp_session_set_connection_type()</a> </p>

</div>
</div>
<a class="anchor" id="gac0fa3d4cc60bd2e3d666026f88980e8c"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef enum <a class="el" href="group__session.html#gabf77bb5a124d5a6ee9a12c86abbc0d34">sp_connectionstate</a>  <a class="el" href="group__session.html#gabf77bb5a124d5a6ee9a12c86abbc0d34">sp_connectionstate</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Describes the current state of the connection </p>

</div>
</div>
<a class="anchor" id="gaca320fd41bd0556b7fa1f2fa6e14faee"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef enum <a class="el" href="group__session.html#ga61bc424465d776af3ceeb69eee2bb492">sp_image_size</a>  <a class="el" href="group__session.html#ga61bc424465d776af3ceeb69eee2bb492">sp_image_size</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Image size </p>

</div>
</div>
<a class="anchor" id="gaa7f24f13d6d105869c405045a4cc2a20"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef struct <a class="el" href="structsp__offline__sync__status.html">sp_offline_sync_status</a>  <a class="el" href="structsp__offline__sync__status.html">sp_offline_sync_status</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Offline sync status </p>

</div>
</div>
<a class="anchor" id="gac507efa32e8c122fbe9ea41d96180d06"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef enum <a class="el" href="group__session.html#ga811fa52ed0fdb5cda732682e27e40417">sp_playlist_offline_status</a>  <a class="el" href="group__session.html#ga811fa52ed0fdb5cda732682e27e40417">sp_playlist_offline_status</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Playlist offline status </p>

</div>
</div>
<a class="anchor" id="ga86723f553db2db6a8f507cd748948ad4"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef enum <a class="el" href="group__session.html#gafdd7117213605e6f2671c4f289b44609">sp_playlist_type</a>  <a class="el" href="group__session.html#gafdd7117213605e6f2671c4f289b44609">sp_playlist_type</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Playlist types </p>

</div>
</div>
<a class="anchor" id="ga5ef462e78d5a5af60dd0e7085b1ba512"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef enum <a class="el" href="group__session.html#ga087d21080010768316cfb55d938eb94d">sp_sampletype</a>  <a class="el" href="group__session.html#ga087d21080010768316cfb55d938eb94d">sp_sampletype</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Sample type descriptor </p>

</div>
</div>
<a class="anchor" id="ga647e4de81e5ac0a2e5d1193b1005ed3e"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef enum <a class="el" href="group__session.html#ga99e8e9176ce40fff08a9be8b944edb09">sp_search_type</a>  <a class="el" href="group__session.html#ga99e8e9176ce40fff08a9be8b944edb09">sp_search_type</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Search types </p>

</div>
</div>
<a class="anchor" id="gaf1d92302cd5d0d4a032e1408188c8fd5"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef struct <a class="el" href="structsp__session__callbacks.html">sp_session_callbacks</a>  <a class="el" href="structsp__session__callbacks.html">sp_session_callbacks</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Session callbacks</p>
<p>Registered when you create a session. If some callbacks should not be of interest, set them to NULL. </p>

</div>
</div>
<a class="anchor" id="ga372b25a93da38d4d707b0c2eaa7b3ebb"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef struct <a class="el" href="structsp__session__config.html">sp_session_config</a>  <a class="el" href="structsp__session__config.html">sp_session_config</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Session config </p>

</div>
</div>
<a class="anchor" id="gafb515e30d134c61b8eaaff3177af0b5b"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef struct <a class="el" href="structsp__subscribers.html">sp_subscribers</a>  <a class="el" href="structsp__subscribers.html">sp_subscribers</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>List of subscribers returned by <a class="el" href="group__playlist.html#gad49f491babc475f8d4aeea1b4452ff8b">sp_playlist_subscribers()</a> </p>

</div>
</div>
<a class="anchor" id="ga60c7ff53ddbc04c036a23181b7275d69"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef enum <a class="el" href="group__session.html#gad7d9465769597b2a379ac704099adfdf">sp_availability</a>  <a class="el" href="group__session.html#ga60c7ff53ddbc04c036a23181b7275d69">sp_track_availability</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Track availability </p>

</div>
</div>
<a class="anchor" id="gae689044941537050de641a1dcd4c75d5"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef enum <a class="el" href="group__session.html#gaeaa41aad3c0047409996a6ec3b03203f">sp_track_offline_status</a>  <a class="el" href="group__session.html#gaeaa41aad3c0047409996a6ec3b03203f">sp_track_offline_status</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Track offline status </p>

</div>
</div>
<hr/><h2>Enumeration Type Documentation</h2>
<a class="anchor" id="gac86504cc9e8cadbc30c8aa8dbf355034"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group__session.html#gac86504cc9e8cadbc30c8aa8dbf355034">sp_artistbrowse_type</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Controls the type of data that will be included in artist browse queries </p>
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" id="ggac86504cc9e8cadbc30c8aa8dbf355034a2914168528aded818177c013a0dd7e87"></a>SP_ARTISTBROWSE_FULL</em>&nbsp;</td><td>
<p>All information except tophit tracks This mode is deprecated and will removed in a future release </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="ggac86504cc9e8cadbc30c8aa8dbf355034afbad1e58606b3230dce5bc3320c95d12"></a>SP_ARTISTBROWSE_NO_TRACKS</em>&nbsp;</td><td>
<p>Only albums and data about them, no tracks. In other words, <a class="el" href="group__artistbrowse.html#ga8c862caa2234125ffcc4e93287b1e029">sp_artistbrowse_num_tracks()</a> will return 0 </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="ggac86504cc9e8cadbc30c8aa8dbf355034ac0032981f8dbf44c022e6a7ab1672167"></a>SP_ARTISTBROWSE_NO_ALBUMS</em>&nbsp;</td><td>
<p>Only return data about the artist (artist name, similar artist biography, etc No tracks or album will be abailable. <a class="el" href="group__artistbrowse.html#ga8c862caa2234125ffcc4e93287b1e029">sp_artistbrowse_num_tracks()</a> and <a class="el" href="group__artistbrowse.html#gaf0055361abd53425d89a4636a32b5c83">sp_artistbrowse_num_albums()</a> will both return 0 </p>
</td></tr>
</table>
</dd>
</dl>

</div>
</div>
<a class="anchor" id="gad7d9465769597b2a379ac704099adfdf"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group__session.html#gad7d9465769597b2a379ac704099adfdf">sp_availability</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Track availability </p>
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" id="ggad7d9465769597b2a379ac704099adfdfa44bc1e6f138910b3f8dbd309325e0077"></a>SP_TRACK_AVAILABILITY_UNAVAILABLE</em>&nbsp;</td><td>
<p>Track is not available. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="ggad7d9465769597b2a379ac704099adfdfa3b837ba6d740b5650b0113734a3b2ff7"></a>SP_TRACK_AVAILABILITY_AVAILABLE</em>&nbsp;</td><td>
<p>Track is available and can be played. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="ggad7d9465769597b2a379ac704099adfdfae7b2cfafa10288ecc50df97621bbe940"></a>SP_TRACK_AVAILABILITY_NOT_STREAMABLE</em>&nbsp;</td><td>
<p>Track can not be streamed using this account. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="ggad7d9465769597b2a379ac704099adfdfaeb5d63e89c543f513cd3054969e50914"></a>SP_TRACK_AVAILABILITY_BANNED_BY_ARTIST</em>&nbsp;</td><td>
<p>Track not available on artist's reqeust. </p>
</td></tr>
</table>
</dd>
</dl>

</div>
</div>
<a class="anchor" id="ga77ddd919314a7bb16140569af7a38fe2"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group__session.html#ga77ddd919314a7bb16140569af7a38fe2">sp_bitrate</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Bitrate definitions for music streaming </p>
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" id="gga77ddd919314a7bb16140569af7a38fe2a5b5c794224972f833a4b7eec9d7909c9"></a>SP_BITRATE_160k</em>&nbsp;</td><td>
<p>Bitrate 160kbps. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga77ddd919314a7bb16140569af7a38fe2a9383c0dc9faefd2cbb38c3b9342c47e0"></a>SP_BITRATE_320k</em>&nbsp;</td><td>
<p>Bitrate 320kbps. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga77ddd919314a7bb16140569af7a38fe2ad815a35af7e6bb5e2ef29418af62759b"></a>SP_BITRATE_96k</em>&nbsp;</td><td>
<p>Bitrate 96kbps. </p>
</td></tr>
</table>
</dd>
</dl>

</div>
</div>
<a class="anchor" id="gad275d696685b2ad9ff1a2c3e16af6502"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group__session.html#gad275d696685b2ad9ff1a2c3e16af6502">sp_connection_rules</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Connection rules, bitwise OR of flags</p>
<p>The default is SP_CONNECTION_RULE_NETWORK | SP_CONNECTION_RULE_ALLOW_SYNC </p>
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" id="ggad275d696685b2ad9ff1a2c3e16af6502aa39a1c21c17c55cd1547bc900ae2d386"></a>SP_CONNECTION_RULE_NETWORK</em>&nbsp;</td><td>
<p>Allow network traffic. When not set libspotify will force itself into offline mode. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="ggad275d696685b2ad9ff1a2c3e16af6502af2772ba84ee7e410ad99708a11955670"></a>SP_CONNECTION_RULE_NETWORK_IF_ROAMING</em>&nbsp;</td><td>
<p>Allow network traffic even if roaming. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="ggad275d696685b2ad9ff1a2c3e16af6502a91a946573c44de44d74e9d20dbce4c74"></a>SP_CONNECTION_RULE_ALLOW_SYNC_OVER_MOBILE</em>&nbsp;</td><td>
<p>Set to allow syncing of offline content over mobile connections. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="ggad275d696685b2ad9ff1a2c3e16af6502a548f3734832ec65a992e598d8b91633d"></a>SP_CONNECTION_RULE_ALLOW_SYNC_OVER_WIFI</em>&nbsp;</td><td>
<p>Set to allow syncing of offline content over WiFi. </p>
</td></tr>
</table>
</dd>
</dl>

</div>
</div>
<a class="anchor" id="ga3e8773baeb94189b9a1ff27d6a5e3553"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group__session.html#ga3e8773baeb94189b9a1ff27d6a5e3553">sp_connection_type</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Current connection type set using <a class="el" href="group__session.html#gaf81c61799e0ccdbba048fb79ec050930">sp_session_set_connection_type()</a> </p>
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" id="gga3e8773baeb94189b9a1ff27d6a5e3553af949fae9bc12f47b99ef290fa9b5d8a7"></a>SP_CONNECTION_TYPE_UNKNOWN</em>&nbsp;</td><td>
<p>Connection type unknown (Default) </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga3e8773baeb94189b9a1ff27d6a5e3553aa7aae7ae3f7c471ece1c6aa2705d046c"></a>SP_CONNECTION_TYPE_NONE</em>&nbsp;</td><td>
<p>No connection. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga3e8773baeb94189b9a1ff27d6a5e3553a3ca3e6a85ac9d497914c35620ad5179d"></a>SP_CONNECTION_TYPE_MOBILE</em>&nbsp;</td><td>
<p>Mobile data (EDGE, 3G, etc) </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga3e8773baeb94189b9a1ff27d6a5e3553a05b41bbfd369f9030a7daafc9395116e"></a>SP_CONNECTION_TYPE_MOBILE_ROAMING</em>&nbsp;</td><td>
<p>Roamed mobile data (EDGE, 3G, etc) </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga3e8773baeb94189b9a1ff27d6a5e3553a31d2cad7379f1bc2eeedd24c40541cb9"></a>SP_CONNECTION_TYPE_WIFI</em>&nbsp;</td><td>
<p>Wireless connection. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga3e8773baeb94189b9a1ff27d6a5e3553a4f9f0c09e59af4114bb369ebcc474710"></a>SP_CONNECTION_TYPE_WIRED</em>&nbsp;</td><td>
<p>Ethernet cable, etc. </p>
</td></tr>
</table>
</dd>
</dl>

</div>
</div>
<a class="anchor" id="gabf77bb5a124d5a6ee9a12c86abbc0d34"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group__session.html#gabf77bb5a124d5a6ee9a12c86abbc0d34">sp_connectionstate</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Describes the current state of the connection </p>
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" id="ggabf77bb5a124d5a6ee9a12c86abbc0d34ae31e9958a98211ecff5ecbcf7041dfa5"></a>SP_CONNECTION_STATE_LOGGED_OUT</em>&nbsp;</td><td>
<p>User not yet logged in. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="ggabf77bb5a124d5a6ee9a12c86abbc0d34a88ae17b4168184e62e4c190c289c47c5"></a>SP_CONNECTION_STATE_LOGGED_IN</em>&nbsp;</td><td>
<p>Logged in against a Spotify access point. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="ggabf77bb5a124d5a6ee9a12c86abbc0d34ad1a6eb721675af4613f823c091538a8c"></a>SP_CONNECTION_STATE_DISCONNECTED</em>&nbsp;</td><td>
<p>Was logged in, but has now been disconnected. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="ggabf77bb5a124d5a6ee9a12c86abbc0d34a4ddf57518007eef86b06f496d7059484"></a>SP_CONNECTION_STATE_UNDEFINED</em>&nbsp;</td><td>
<p>The connection state is undefined. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="ggabf77bb5a124d5a6ee9a12c86abbc0d34a63099ef9185ba287fcd2e77be3c47d8f"></a>SP_CONNECTION_STATE_OFFLINE</em>&nbsp;</td><td>
<p>Logged in in offline mode. </p>
</td></tr>
</table>
</dd>
</dl>

</div>
</div>
<a class="anchor" id="ga61bc424465d776af3ceeb69eee2bb492"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group__session.html#ga61bc424465d776af3ceeb69eee2bb492">sp_image_size</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Image size </p>
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" id="gga61bc424465d776af3ceeb69eee2bb492ad20c808fd1f8180d1f49f643975d1dd7"></a>SP_IMAGE_SIZE_NORMAL</em>&nbsp;</td><td>
<p>Normal image size. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga61bc424465d776af3ceeb69eee2bb492ab9340b1bcf2129c3ad1328ea617d547f"></a>SP_IMAGE_SIZE_SMALL</em>&nbsp;</td><td>
<p>Small image size. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga61bc424465d776af3ceeb69eee2bb492a0a0b624afbb2a66ee3d7954202b89721"></a>SP_IMAGE_SIZE_LARGE</em>&nbsp;</td><td>
<p>Large image size. </p>
</td></tr>
</table>
</dd>
</dl>

</div>
</div>
<a class="anchor" id="ga811fa52ed0fdb5cda732682e27e40417"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group__session.html#ga811fa52ed0fdb5cda732682e27e40417">sp_playlist_offline_status</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Playlist offline status </p>
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" id="gga811fa52ed0fdb5cda732682e27e40417abef62e4e3a4af8827fed7fe3aa733ca0"></a>SP_PLAYLIST_OFFLINE_STATUS_NO</em>&nbsp;</td><td>
<p>Playlist is not offline enabled. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga811fa52ed0fdb5cda732682e27e40417affed38ac820e084b96fb48e3d1939584"></a>SP_PLAYLIST_OFFLINE_STATUS_YES</em>&nbsp;</td><td>
<p>Playlist is synchronized to local storage. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga811fa52ed0fdb5cda732682e27e40417abc999c70761d392b26753708e9a2cfa1"></a>SP_PLAYLIST_OFFLINE_STATUS_DOWNLOADING</em>&nbsp;</td><td>
<p>This playlist is currently downloading. Only one playlist can be in this state any given time. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga811fa52ed0fdb5cda732682e27e40417a7d929bbf4f1df3633b283e39b9c95919"></a>SP_PLAYLIST_OFFLINE_STATUS_WAITING</em>&nbsp;</td><td>
<p>Playlist is queued for download. </p>
</td></tr>
</table>
</dd>
</dl>

</div>
</div>
<a class="anchor" id="gafdd7117213605e6f2671c4f289b44609"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group__session.html#gafdd7117213605e6f2671c4f289b44609">sp_playlist_type</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Playlist types </p>
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" id="ggafdd7117213605e6f2671c4f289b44609a6bd6bf9b62018fa9bbf969835c2f3077"></a>SP_PLAYLIST_TYPE_PLAYLIST</em>&nbsp;</td><td>
<p>A normal playlist. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="ggafdd7117213605e6f2671c4f289b44609a4d3266991787f9438deb9de83d9200da"></a>SP_PLAYLIST_TYPE_START_FOLDER</em>&nbsp;</td><td>
<p>Marks a folder starting point,. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="ggafdd7117213605e6f2671c4f289b44609a3ec52ad1d99d8e32e1b9de31e3f5187a"></a>SP_PLAYLIST_TYPE_END_FOLDER</em>&nbsp;</td><td>
<p>and ending point. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="ggafdd7117213605e6f2671c4f289b44609ad4f860ef76154e3e2c0d9da2f57a2784"></a>SP_PLAYLIST_TYPE_PLACEHOLDER</em>&nbsp;</td><td>
<p>Unknown entry. </p>
</td></tr>
</table>
</dd>
</dl>

</div>
</div>
<a class="anchor" id="ga087d21080010768316cfb55d938eb94d"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group__session.html#ga087d21080010768316cfb55d938eb94d">sp_sampletype</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Sample type descriptor </p>
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" id="gga087d21080010768316cfb55d938eb94daa829b269d191cca95ecb02c2bc59da42"></a>SP_SAMPLETYPE_INT16_NATIVE_ENDIAN</em>&nbsp;</td><td>
<p>16-bit signed integer samples </p>
</td></tr>
</table>
</dd>
</dl>

</div>
</div>
<a class="anchor" id="ga99e8e9176ce40fff08a9be8b944edb09"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group__session.html#ga99e8e9176ce40fff08a9be8b944edb09">sp_search_type</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Search types </p>

</div>
</div>
<a class="anchor" id="gaeaa41aad3c0047409996a6ec3b03203f"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group__session.html#gaeaa41aad3c0047409996a6ec3b03203f">sp_track_offline_status</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Track offline status </p>
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" id="ggaeaa41aad3c0047409996a6ec3b03203faad1a1cba82ce9f9be678f4d1042eddec"></a>SP_TRACK_OFFLINE_NO</em>&nbsp;</td><td>
<p>Not marked for offline. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="ggaeaa41aad3c0047409996a6ec3b03203fa1fdd2a518dcdc072cfca27a0ca4f2581"></a>SP_TRACK_OFFLINE_WAITING</em>&nbsp;</td><td>
<p>Waiting for download. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="ggaeaa41aad3c0047409996a6ec3b03203fa7dcf6dfc56a8421200451d07a476f370"></a>SP_TRACK_OFFLINE_DOWNLOADING</em>&nbsp;</td><td>
<p>Currently downloading. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="ggaeaa41aad3c0047409996a6ec3b03203fac54d46cbc73de7686a1ad8daf269532a"></a>SP_TRACK_OFFLINE_DONE</em>&nbsp;</td><td>
<p>Downloaded OK and can be played. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="ggaeaa41aad3c0047409996a6ec3b03203fa86618798c266540bdc889dd037a52631"></a>SP_TRACK_OFFLINE_ERROR</em>&nbsp;</td><td>
<p>Error during download. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="ggaeaa41aad3c0047409996a6ec3b03203fa00fe430030fb6a8a49a46c11cca7326c"></a>SP_TRACK_OFFLINE_DONE_EXPIRED</em>&nbsp;</td><td>
<p>Downloaded OK but not playable due to expiery. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="ggaeaa41aad3c0047409996a6ec3b03203fa405a9b7a3fa489ad2dadbb108794e247"></a>SP_TRACK_OFFLINE_LIMIT_EXCEEDED</em>&nbsp;</td><td>
<p>Waiting because device have reached max number of allowed tracks. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="ggaeaa41aad3c0047409996a6ec3b03203fa5f3e19627de4509ae4a3864fd29edee6"></a>SP_TRACK_OFFLINE_DONE_RESYNC</em>&nbsp;</td><td>
<p>Downloaded OK and available but scheduled for re-download. </p>
</td></tr>
</table>
</dd>
</dl>

</div>
</div>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="gad6cee58fa44453b7a4fd2ae2266df055"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="group__session.html#gad6cee58fa44453b7a4fd2ae2266df055">sp_offline_num_playlists</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return number of playlisys that is marked for offline synchronization</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Session object</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>Number of playlists </dd></dl>

</div>
</div>
<a class="anchor" id="ga02525cd659a34728047cd3801049e822"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="group__session.html#ga02525cd659a34728047cd3801049e822">sp_offline_sync_get_status</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structsp__offline__sync__status.html">sp_offline_sync_status</a> *&#160;</td>
          <td class="paramname"><em>status</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return offline synchronization status. When the internal status is updated the offline_status_updated() callback will be invoked.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Session object </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">status</td><td>Status object that will be filled with info</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>false if no synching is in progress (in which case the contents of status is undefined) </dd></dl>

</div>
</div>
<a class="anchor" id="gac36816dc42825db9a5a2fbd2694f20af"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="group__session.html#gac36816dc42825db9a5a2fbd2694f20af">sp_offline_time_left</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return remaining time (in seconds) until the offline key store expires and the user is required to relogin</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Session object </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>Seconds until expiration </dd></dl>

</div>
</div>
<a class="anchor" id="gaf535124b4208c279cb98a061834e6411"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="group__session.html#gaf535124b4208c279cb98a061834e6411">sp_offline_tracks_to_sync</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Get total number of tracks that needs download before everything from all playlists that is marked for offline is fully synchronized</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Session object</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>Number of tracks </dd></dl>

</div>
</div>
<a class="anchor" id="ga34a7c9527705ab7d23b742006d81ea35"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__session.html#gabf77bb5a124d5a6ee9a12c86abbc0d34">sp_connectionstate</a> <a class="el" href="group__session.html#ga34a7c9527705ab7d23b742006d81ea35">sp_session_connectionstate</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>The connection state of the specified session.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Your session object</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>The connection state - see the sp_connectionstate enum for possible values </dd></dl>

</div>
</div>
<a class="anchor" id="gaf2891f2daced4ff6da84219d6376b3aa"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__session.html#gaf2891f2daced4ff6da84219d6376b3aa">sp_session_create</a> </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="structsp__session__config.html">sp_session_config</a> *&#160;</td>
          <td class="paramname"><em>config</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> **&#160;</td>
          <td class="paramname"><em>sess</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Initialize a session. The session returned will be initialized, but you will need to log in before you can perform any other operation Currently it is not supported to have multiple active sessions, and it's recommended to only call this once per process.</p>
<p>Here is a snippet from <code>spshell.c:</code>  <div class="fragment"><pre class="fragment">    config.api_version = <a class="code" href="group__session.html#ga63b2309874193750ec3395f6cae32899">SPOTIFY_API_VERSION</a>;

    <span class="comment">// The path of the directory to store the cache. This must be specified.</span>
    <span class="comment">// Please read the documentation on preferred values.</span>
    config.cache_location = selftest ? <span class="stringliteral">&quot;&quot;</span> : <span class="stringliteral">&quot;tmp&quot;</span>;

    <span class="comment">// The path of the directory to store the settings. </span>
    <span class="comment">// This must be specified.</span>
    <span class="comment">// Please read the documentation on preferred values.</span>
    config.settings_location = selftest ? <span class="stringliteral">&quot;&quot;</span> : <span class="stringliteral">&quot;tmp&quot;</span>;

    <span class="comment">// The key of the application. They are generated by Spotify,</span>
    <span class="comment">// and are specific to each application using libspotify.</span>
    config.application_key = g_appkey;
    config.application_key_size = g_appkey_size;

    <span class="comment">// This identifies the application using some</span>
    <span class="comment">// free-text string [1, 255] characters.</span>
    config.user_agent = <span class="stringliteral">&quot;spshell&quot;</span>;

<span class="comment">//ifdef SP_WITH_CURL</span>
<span class="preprocessor">#ifdef SP_WITH_CURL</span>
<span class="preprocessor"></span>    config.ca_certs_filename = <span class="stringliteral">&quot;../cacerts.pem&quot;</span>;
<span class="preprocessor">#endif</span>
<span class="preprocessor"></span><span class="comment">//endif</span>

    <span class="comment">// Register the callbacks.</span>
    callbacks.logged_in = logged_in;
    callbacks.logged_out = logged_out;
    callbacks.metadata_updated = metadata_updated;
    callbacks.connection_error = connection_error;
    callbacks.notify_main_thread = notify_main_thread;
<span class="preprocessor">#if WITH_TEST_COMMAND</span>
<span class="preprocessor"></span>    callbacks.music_delivery = music_delivery;
    callbacks.play_token_lost = play_token_lost;
    callbacks.end_of_track = end_of_track;
<span class="preprocessor">#endif</span>
<span class="preprocessor"></span>    callbacks.log_message = log_message;
    callbacks.offline_status_updated = offline_status_updated;
    callbacks.credentials_blob_updated = credentials_blob_updated;
<span class="comment">//ifdef SP_LIBSPOTIFY_WITH_SCROBBLING</span>
<span class="preprocessor">#ifdef SP_LIBSPOTIFY_WITH_SCROBBLING</span>
<span class="preprocessor"></span>    callbacks.scrobble_error = scrobble_error;
    callbacks.private_session_mode_changed = private_session_mode_changed;
<span class="preprocessor">#endif</span>
<span class="preprocessor"></span><span class="comment">//endif</span>
    config.callbacks = &amp;callbacks;

    error = <a class="code" href="group__session.html#gaf2891f2daced4ff6da84219d6376b3aa">sp_session_create</a>(&amp;config, &amp;session);
    <span class="keywordflow">if</span> (<a class="code" href="group__error.html#ggafd27986ce4cd9eeaeca8adda83c9eb6ba16cb277dc84328e4b2c0cf6d5a0c0b8d" title="No errors encountered.">SP_ERROR_OK</a> != error) {
        fprintf(stderr, <span class="stringliteral">&quot;failed to create session: %s\n&quot;</span>,
                        <a class="code" href="group__error.html#ga983dee341d3c2008830513b7cffe7bf3">sp_error_message</a>(error));
        <span class="keywordflow">return</span> 2;
    }
</pre></div></p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">config</td><td>The configuration to use for the session </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">sess</td><td>If successful, a new session - otherwise NULL</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK SP_ERROR_BAD_API_VERSION SP_ERROR_BAD_USER_AGENT SP_ERROR_BAD_APPLICATION_KEY SP_ERROR_API_INITIALIZATION_FAILED SP_ERROR_INVALID_DEVICE_ID </dd></dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="jukebox_8c-example.html#a30">jukebox.c</a>.</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga34005bb06ee3de8ee4221597a0335cca"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__session.html#ga34005bb06ee3de8ee4221597a0335cca">sp_session_flush_caches</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Flush the caches</p>
<p>This will make libspotify write all data that is meant to be stored on disk to the disk immediately. libspotify does this periodically by itself and also on logout. So under normal conditions this should never need to be used.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Your session object </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK </dd></dl>

</div>
</div>
<a class="anchor" id="ga61e6b796d9e07682c018e888b901a191"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__session.html#ga61e6b796d9e07682c018e888b901a191">sp_session_forget_me</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Remove stored credentials in libspotify. If no credentials are currently stored, nothing will happen.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Your session object </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK </dd></dl>

</div>
</div>
<a class="anchor" id="ga7913df06394360f255c77fb87af0f1fe"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="group__session.html#ga7913df06394360f255c77fb87af0f1fe">sp_session_get_volume_normalization</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return status of volume normalization</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Session object</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>true iff volume normalization is enabled </dd></dl>

</div>
</div>
<a class="anchor" id="gac72ccb51031c846101134b73195bb9ec"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a>* <a class="el" href="group__session.html#gac72ccb51031c846101134b73195bb9ec">sp_session_inbox_create</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Returns an inbox playlist for the currently logged in user</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Session object</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>A playlist or NULL if no user is logged in </dd></dl>
<dl class="section note"><dt>Note:</dt><dd>You need to release the playlist when you are done with it. </dd></dl>
<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__playlist.html#gacb9250eb530869b039541a8b62dfab6c">sp_playlist_release()</a> </dd></dl>

</div>
</div>
<a class="anchor" id="ga72702ee06bc96c074804388d24344149"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="group__session.html#ga72702ee06bc96c074804388d24344149">sp_session_is_private_session</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return True if private session is enabled</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Session object</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>True if private session is enabled </dd></dl>

</div>
</div>
<a class="anchor" id="ga6a56bc82ff0b369bb6e0f035534ce33d"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__session.html#ga6a56bc82ff0b369bb6e0f035534ce33d">sp_session_is_scrobbling</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">sp_social_provider&#160;</td>
          <td class="paramname"><em>provider</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">sp_scrobbling_state *&#160;</td>
          <td class="paramname"><em>state</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return the scrobbling state. This makes it possible to find out if scrobbling is locally overrided or if the global setting is used.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Session object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">provider</td><td>The scrobbling provider referred to </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">state</td><td>The output variable receiving the sp_scrobbling_state state</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>error code </dd></dl>

</div>
</div>
<a class="anchor" id="ga0fad03ceabcf8d68af78f0f35fcbcc8d"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__session.html#ga0fad03ceabcf8d68af78f0f35fcbcc8d">sp_session_is_scrobbling_possible</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">sp_social_provider&#160;</td>
          <td class="paramname"><em>provider</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool *&#160;</td>
          <td class="paramname"><em>out</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return True if scrobbling settings should be shown to the user. Currently this setting is relevant only to the facebook provider. The returned value may be false if the user is not connected to facebook, or if the user has opted out from facebook social graph.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Session object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">provider</td><td>The scrobbling provider referred to </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">out</td><td>True iff scrobbling is possible</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>error code </dd></dl>

</div>
</div>
<a class="anchor" id="ga4533a992a120cacb109c892a852afe2a"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__session.html#ga4533a992a120cacb109c892a852afe2a">sp_session_login</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>username</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>password</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>remember_me</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>blob</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Logs in the specified username/password combo. This initiates the login in the background. A callback is called when login is complete</p>
<p>An application MUST NEVER store the user's password in clear text. If automatic relogin is required, use <a class="el" href="group__session.html#gae1bc9bebd230226c3d48925cd1be6edf">sp_session_relogin()</a></p>
<p>Here is a snippet from <code>spshell.c:</code>  <div class="fragment"><pre class="fragment">        <a class="code" href="group__session.html#ga4533a992a120cacb109c892a852afe2a">sp_session_login</a>(session, username, password, 1, blob);
    }
</pre></div></p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Your session object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">username</td><td>The username to log in </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">password</td><td>The password for the specified username </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">remember_me</td><td>If set, the username / password will be remembered by libspotify </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">blob</td><td>If you have received a blob in the #credentials_blob_updated you can pas this here instead of password </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK </dd></dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="jukebox_8c-example.html#a31">jukebox.c</a>.</dd>
</dl>
</div>
</div>
<a class="anchor" id="gab7f08ca0939985b30ae2d1ed9db1d726"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__session.html#gab7f08ca0939985b30ae2d1ed9db1d726">sp_session_logout</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Logs out the currently logged in user</p>
<p>Always call this before terminating the application and libspotify is currently logged in. Otherwise, the settings and cache may be lost.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Your session object </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK </dd></dl>

</div>
</div>
<a class="anchor" id="gac73bf2c569a43d824439b557d5e4b293"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__session.html#gac73bf2c569a43d824439b557d5e4b293">sp_session_player_load</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__types.html#ga47bbd2262f0c8b5d7147af7d62198e48">sp_track</a> *&#160;</td>
          <td class="paramname"><em>track</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Loads the specified track</p>
<p>After successfully loading the track, you have the option of running <a class="el" href="group__session.html#gab66c5915967e4f90db945b118e620624">sp_session_player_play()</a> directly, or using <a class="el" href="group__session.html#ga3430cd4f11541868d3f83eaa31aecf44">sp_session_player_seek()</a> first. When this call returns, the track will have been loaded, unless an error occurred.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Your session object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">track</td><td>The track to be loaded</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK SP_ERROR_MISSING_CALLBACK SP_ERROR_TRACK_NOT_PLAYABLE </dd></dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="jukebox_8c-example.html#a6">jukebox.c</a>.</dd>
</dl>
</div>
</div>
<a class="anchor" id="gab66c5915967e4f90db945b118e620624"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__session.html#gab66c5915967e4f90db945b118e620624">sp_session_player_play</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>play</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Play or pause the currently loaded track</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Your session object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">play</td><td>If set to true, playback will occur. If set to false, the playback will be paused. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK </dd></dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="jukebox_8c-example.html#a7">jukebox.c</a>.</dd>
</dl>
</div>
</div>
<a class="anchor" id="gaf42e30a1f430ac7c436c7d9f0485368d"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__session.html#gaf42e30a1f430ac7c436c7d9f0485368d">sp_session_player_prefetch</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__types.html#ga47bbd2262f0c8b5d7147af7d62198e48">sp_track</a> *&#160;</td>
          <td class="paramname"><em>track</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Prefetch a track</p>
<p>Instruct libspotify to start loading of a track into its cache. This could be done by an application just before the current track ends.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Your session object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">track</td><td>The track to be prefetched</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_NO_CACHE SP_ERROR_OK</dd></dl>
<dl class="section note"><dt>Note:</dt><dd>Prefetching is only possible if a cache is configured </dd></dl>

</div>
</div>
<a class="anchor" id="ga3430cd4f11541868d3f83eaa31aecf44"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__session.html#ga3430cd4f11541868d3f83eaa31aecf44">sp_session_player_seek</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>offset</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Seek to position in the currently loaded track</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Your session object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">offset</td><td>Track position, in milliseconds. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK </dd></dl>

</div>
</div>
<a class="anchor" id="gafa7ee2803f119451bb8be3bf28746975"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__session.html#gafa7ee2803f119451bb8be3bf28746975">sp_session_player_unload</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Stops the currently playing track</p>
<p>This frees some resources held by libspotify to identify the currently playing track.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Your session object </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK </dd></dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="jukebox_8c-example.html#a2">jukebox.c</a>.</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga319767f0b795f1c46a08390b587c5671"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a>* <a class="el" href="group__session.html#ga319767f0b795f1c46a08390b587c5671">sp_session_playlistcontainer</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Returns the playlist container for the currently logged in user.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Your session object</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>Playlist container object, NULL if not logged in </dd></dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="jukebox_8c-example.html#a16">jukebox.c</a>.</dd>
</dl>
</div>
</div>
<a class="anchor" id="gacd590e095b011af42fb10046117846fe"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__session.html#gacd590e095b011af42fb10046117846fe">sp_session_preferred_bitrate</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__session.html#ga77ddd919314a7bb16140569af7a38fe2">sp_bitrate</a>&#160;</td>
          <td class="paramname"><em>bitrate</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Set preferred bitrate for music streaming</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Session object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bitrate</td><td>Preferred bitrate, see <a class="el" href="group__session.html#ga83d3de45241a44e787410993c5fac0ea">sp_bitrate</a> for possible values </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK SP_ERROR_INVALID_ARGUMENT </dd></dl>

</div>
</div>
<a class="anchor" id="ga4bba5f828d6c87692f2c355cc8f07c61"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__session.html#ga4bba5f828d6c87692f2c355cc8f07c61">sp_session_preferred_offline_bitrate</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__session.html#ga77ddd919314a7bb16140569af7a38fe2">sp_bitrate</a>&#160;</td>
          <td class="paramname"><em>bitrate</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>allow_resync</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Set preferred bitrate for offline sync</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Session object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">bitrate</td><td>Preferred bitrate, see <a class="el" href="group__session.html#ga83d3de45241a44e787410993c5fac0ea">sp_bitrate</a> for possible values </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">allow_resync</td><td>Set to true if libspotify should resynchronize already synchronized tracks. Usually you should set this to false. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK SP_ERROR_INVALID_ARGUMENT </dd></dl>

</div>
</div>
<a class="anchor" id="gaff27cb730db6debf55e750e39e7fadd7"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__session.html#gaff27cb730db6debf55e750e39e7fadd7">sp_session_process_events</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&#160;</td>
          <td class="paramname"><em>next_timeout</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Make the specified session process any pending events</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Your session object </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">next_timeout</td><td>Stores the time (in milliseconds) until you should call this function again </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK </dd></dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="jukebox_8c-example.html#a32">jukebox.c</a>.</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga4ad3a1de596a41f275120dad3bb4685d"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a>* <a class="el" href="group__session.html#ga4ad3a1de596a41f275120dad3bb4685d">sp_session_publishedcontainer_for_user_create</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>canonical_username</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return the published container for a given <em>canonical_username</em>, or the currently logged in user if <em>canonical_username</em> is NULL.</p>
<p>When done with the list you should call sp_playlistconatiner_release() to decrese the reference you own by having created it.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Your session object. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">canonical_username</td><td>The canonical username, or NULL.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>Playlist container object, NULL if not logged in. </dd></dl>

</div>
</div>
<a class="anchor" id="gab81c540b76f7425a9cc0dbf270c09674"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__session.html#gab81c540b76f7425a9cc0dbf270c09674">sp_session_release</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>sess</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Release the session. This will clean up all data and connections associated with the session</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">sess</td><td>Session object returned from <a class="el" href="group__session.html#gaf2891f2daced4ff6da84219d6376b3aa">sp_session_create()</a> </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK </dd></dl>

</div>
</div>
<a class="anchor" id="gae1bc9bebd230226c3d48925cd1be6edf"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__session.html#gae1bc9bebd230226c3d48925cd1be6edf">sp_session_relogin</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Log in the remembered user if last user that logged in logged in with remember_me set. If no credentials are stored, this will return SP_ERROR_NO_CREDENTIALS.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Your session object</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK SP_ERROR_NO_CREDENTIALS </dd></dl>

</div>
</div>
<a class="anchor" id="gab349c7bfe59e10e167bd75c20df9fc97"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="group__session.html#gab349c7bfe59e10e167bd75c20df9fc97">sp_session_remembered_user</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char *&#160;</td>
          <td class="paramname"><em>buffer</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>buffer_size</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Get username of the user that will be logged in via <a class="el" href="group__session.html#gae1bc9bebd230226c3d48925cd1be6edf">sp_session_relogin()</a></p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Your session object </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">buffer</td><td>The buffer to hold the username </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">buffer_size</td><td>The max size of the buffer that will hold the username. The resulting string is guaranteed to always be null terminated if buffer_size &gt; 0</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>The number of characters in the username. If value is greater or equal than <code>buffer_size</code>, output was truncated. If returned value is -1 no credentials are stored in libspotify. </dd></dl>

</div>
</div>
<a class="anchor" id="ga6f27c55d1ce9f3f794fcce7bee7adfea"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__session.html#ga6f27c55d1ce9f3f794fcce7bee7adfea">sp_session_set_cache_size</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>size</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Set maximum cache size.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Your session object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">size</td><td>Maximum cache size in megabytes. Setting it to 0 (the default) will let libspotify automatically resize the cache (10% of disk free space) </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK </dd></dl>

</div>
</div>
<a class="anchor" id="ga0ac85299c37710321b6d64713e1d6ba8"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__session.html#ga0ac85299c37710321b6d64713e1d6ba8">sp_session_set_connection_rules</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__session.html#gad275d696685b2ad9ff1a2c3e16af6502">sp_connection_rules</a>&#160;</td>
          <td class="paramname"><em>rules</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Set rules for how libspotify connects to Spotify servers and synchronizes offline content</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Session object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">rules</td><td>Connection rules</td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>Note:</dt><dd>Used in conjunction with <a class="el" href="group__session.html#gaf81c61799e0ccdbba048fb79ec050930">sp_session_set_connection_type()</a> to control how libspotify should behave in respect to network activity and offline synchronization. </dd></dl>
<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__session.html#ga24ee483cdceef9af3b415c020b197a75">sp_connection_rules</a> </dd></dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK </dd></dl>

</div>
</div>
<a class="anchor" id="gaf81c61799e0ccdbba048fb79ec050930"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__session.html#gaf81c61799e0ccdbba048fb79ec050930">sp_session_set_connection_type</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__session.html#ga3e8773baeb94189b9a1ff27d6a5e3553">sp_connection_type</a>&#160;</td>
          <td class="paramname"><em>type</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Set to true if the connection is currently routed over a roamed connectivity</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Session object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">type</td><td>Connection type</td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>Note:</dt><dd>Used in conjunction with <a class="el" href="group__session.html#ga0ac85299c37710321b6d64713e1d6ba8">sp_session_set_connection_rules()</a> to control how libspotify should behave in respect to network activity and offline synchronization. </dd></dl>
<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__session.html#ga05a7dbb946a9c47bf011f3f3d77964c3">sp_connection_type</a> </dd></dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK </dd></dl>

</div>
</div>
<a class="anchor" id="ga42a8f0999316ac7f141926092879ad2f"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__session.html#ga42a8f0999316ac7f141926092879ad2f">sp_session_set_private_session</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>enabled</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Set if private session is enabled. This disables sharing what the user is listening to to services such as Spotify Social, Facebook and LastFM. The private session will last for a time, and then libspotify will revert to the normal state. The private session is prolonged by user activity.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Session object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">enabled</td><td>True iff private session should be enabled </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK </dd></dl>

</div>
</div>
<a class="anchor" id="ga2475a1fbc2eeacccb96b7f36efd36725"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__session.html#ga2475a1fbc2eeacccb96b7f36efd36725">sp_session_set_scrobbling</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">sp_social_provider&#160;</td>
          <td class="paramname"><em>provider</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">sp_scrobbling_state&#160;</td>
          <td class="paramname"><em>state</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Set if scrobbling is enabled. This api allows setting local overrides of the global scrobbling settings. Changing the global settings are currently not supported.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Session object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">provider</td><td>The scrobbling provider referred to </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">state</td><td>The state to set the provider to</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>error code</dd></dl>
<dl class="section see"><dt>See also:</dt><dd>sp_social_provider </dd>
<dd>
sp_scrobbling_state </dd></dl>

</div>
</div>
<a class="anchor" id="ga9e5ee46ef5e75aa462607caac984f2de"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__session.html#ga9e5ee46ef5e75aa462607caac984f2de">sp_session_set_social_credentials</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">sp_social_provider&#160;</td>
          <td class="paramname"><em>provider</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>username</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>password</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Set the user's credentials with a social provider. Currently this is only relevant for LastFm Call sp_session_set_scrobbling to force an authentication attempt with the LastFm server. If authentication fails a scrobble_error callback will be sent.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Session object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">provider</td><td>The scrobbling provider referred to </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">username</td><td>The user name </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">password</td><td>The password</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>error code</dd></dl>
<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__session.html#ga2475a1fbc2eeacccb96b7f36efd36725">sp_session_set_scrobbling</a> </dd>
<dd>
<a class="el" href="structsp__session__callbacks.html#a01a47778439fa233187fdefa75a0f7dc">sp_session_callbacks::scrobble_error</a> </dd></dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK </dd></dl>

</div>
</div>
<a class="anchor" id="ga4e14f58356d00e3693be84623bf6bd11"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__session.html#ga4e14f58356d00e3693be84623bf6bd11">sp_session_set_volume_normalization</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>on</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Set volume normalization</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Session object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">on</td><td>True iff volume normalization should be enabled </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK </dd></dl>

</div>
</div>
<a class="anchor" id="ga709699550b72d211b97794315bd5572c"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="group__session.html#ga709699550b72d211b97794315bd5572c">sp_session_signup_get_unaccepted_licenses</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char **&#160;</td>
          <td class="paramname"><em>licenses</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>num_licenses</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Get required licenses.</p>
<p>Use to prompt the user to accept any unsigned licenses.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Your session object. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">licenses</td><td>Pointer to an array of char * to fill with licenses. May be NULL. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">num_licenses</td><td>The size of your licenses array. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>The number of licenses available. </dd></dl>

</div>
</div>
<a class="anchor" id="ga5adf6bed839f5555d6760fcb70fdcf4f"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__session.html#ga5adf6bed839f5555d6760fcb70fdcf4f">sp_session_signup_perform_action</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">sp_signup_action&#160;</td>
          <td class="paramname"><em>action</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>user_data</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Perform a signup action.</p>
<p>Use to signify that the user has performed a step in account signup.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Your session object. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">action</td><td>The action to perform. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">user_data</td><td>The data associated with the action. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK </dd></dl>

</div>
</div>
<a class="anchor" id="ga02391c9e28cff0a602f7139542e0238f"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a>* <a class="el" href="group__session.html#ga02391c9e28cff0a602f7139542e0238f">sp_session_starred_create</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Returns the starred list for the current user</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Session object</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>A playlist or NULL if no user is logged in </dd></dl>
<dl class="section note"><dt>Note:</dt><dd>You need to release the playlist when you are done with it. </dd></dl>
<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__playlist.html#gacb9250eb530869b039541a8b62dfab6c">sp_playlist_release()</a> </dd></dl>

</div>
</div>
<a class="anchor" id="ga9be806a719a6399bfe1fd0d4c125e0eb"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a>* <a class="el" href="group__session.html#ga9be806a719a6399bfe1fd0d4c125e0eb">sp_session_starred_for_user_create</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>canonical_username</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Returns the starred list for a user</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Session object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">canonical_username</td><td>Canonical username</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>A playlist or NULL if no user is logged in </dd></dl>
<dl class="section note"><dt>Note:</dt><dd>You need to release the playlist when you are done with it. </dd></dl>
<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__playlist.html#gacb9250eb530869b039541a8b62dfab6c">sp_playlist_release()</a> </dd></dl>

</div>
</div>
<a class="anchor" id="ga267bbcae24b6bb1fd56de56678a5f455"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__types.html#gaed2dbaa1eebd6752f76613daad9158bc">sp_user</a>* <a class="el" href="group__session.html#ga267bbcae24b6bb1fd56de56678a5f455">sp_session_user</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Fetches the currently logged in user</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Your session object</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>The logged in user (or NULL if not logged in) </dd></dl>

</div>
</div>
<a class="anchor" id="ga54c7693afa9be664f3ea870feb0df8d9"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="group__session.html#ga54c7693afa9be664f3ea870feb0df8d9">sp_session_user_country</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Get currently logged in users country updated the offline_status_updated() callback will be invoked.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Session object</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>Country encoded in an integer 'SE' = 'S' &lt;&lt; 8 | 'E' </dd></dl>

</div>
</div>
<a class="anchor" id="gac7a365c2166738909cdb901edebc3f70"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const char* <a class="el" href="group__session.html#gac7a365c2166738909cdb901edebc3f70">sp_session_user_name</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Get a pointer to a string representing the user's login username.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Your session object</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>A string representing the login username. </dd></dl>

</div>
</div>
<a class="anchor" id="gabfb3f59b20ae0b225e154eb9095152b2"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void* <a class="el" href="group__session.html#gabfb3f59b20ae0b225e154eb9095152b2">sp_session_userdata</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>The userdata associated with the session</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Your session object</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>The userdata that was passed in on session creation </dd></dl>

</div>
</div>
</div><!-- contents -->
<hr size="1"><address style="text-align: right;"><small>
Generated on Wed May 23 2012 11:04:07.<br>
Copyright &copy; 2006&ndash;2012 Spotify Ltd</small></address>
</body>
</html>
